<?php
	class ArticulosController extends ApplicationController {
		public $template = "main";  
	  	function index(){		    
			
		}
		public function before_filter($controlador, $accion, $id)
		{
			$Usuarios = new Usuarios();
			$Articulos = new Articulos();
			$Archivos = new Archivos();
			$Comentarios = new Comentarios();
			if($accion == 'edicion')
			{
				$usuario = $Usuarios->find_first($_SESSION["id"]);
				$articulo = $Articulos->find_first("conditions: titulo='$id'");
				if($articulo->usuarios_id != $_SESSION["id"])
				{
					Flash::error("Error: no puedes editar el artículo.");
					return false;
				}
			}
			if($accion == 'borrarArchivo')
			{
				$usuario = $Usuarios->find_first($_SESSION["id"]);
				$archivo = $Archivos->find_first("conditions: id=$id");
				if($archivo->usuarios_id != $_SESSION["id"])
				{
					Flash::error("Error: no puedes borrar el archivo.");
					return false;
				}
			}
			if($accion == 'editarcomentario')
			{
				$usuario = $Usuarios->find_first($_SESSION["id"]);
				$comentario = $Comentarios->find_first("conditions: id=$id");
				if($usuario->id != $comentario->usuarios_id)
				{
					Flash::error("Error: no puedes editar este comentario.");
					return false;
				}
			}
		}
		function enviar(){
			$articulo = new Articulos();
			$TemasRelacionados = new TemasRelacionados();
			$articulo->titulo = $this->post("titulo");
			$articulo->texto = stripcslashes($this->post("texto"));
			$articulo->enviado_at = date("Y-m-d");
			$articulo->usuarios_id = $_SESSION['id'];
			$articulo->save();
			$tags = $this->post("tags");
			$tagsArray = split(",",$tags);
			$tags = new Tags();
			foreach($tagsArray as $valor)
			{
				if(sizeof($tags->find("tag='".$valor."' and articulos_id='".$articulo->id."'")) == 0)
				{
					$tag = new Tags();
					$tag->tag = $valor;
					$tag->articulos_id = $articulo->id;
					$tag->save();
				}					
			}
			# Archivos
			$cantidaddearchivos = $this->post("cantidaddearchivos");
			for($i=1;$i<=$cantidaddearchivos;$i++)
			{
				if(move_uploaded_file($_FILES["archivo$i"]["tmp_name"],"public/files/$articulo->usuarios_id/".$_FILES["archivo$i"]["name"]))
				{
					$archivo = new Archivos();
					$archivo->ruta_archivo = "public/files/$articulo->usuarios_id/".$_FILES["archivo$i"]["name"];
					$archivo->titulo = $_FILES["archivo$i"]["name"];
					$archivo->usuarios_id = $articulo->usuarios_id;
					$archivo->articulos_id = $articulo->id;
					$archivo->enviado_at = date("Y-m-d");
					$archivo->save();
				}
				else
				{
					Flash::error("Error: no se pudo subir el(los) archivo(s).");
				}
			}
			# Para los temas relacionados
			$tema = new TemasRelacionados();
			$tema->tema = $this->post("categoria");
			$tema->articulos_id = $articulo->id;
			$tema->save();
			Flash::success("El artículo ha sido publicado.");
		}
		function nuevo() {
			if(isset($_SESSION['nombre_usuario']) && isset($_SESSION['password'])) 
				$haysesion = true;
			else
				$haysesion = false;
			if(!$haysesion)
			{
				$this->redirect('articulos/error/1');
			}
		}
		function previsualizar()
		{
			$this->archivos = array();
			$bbcparser = new BBCodeParser();
			$this->vistaprevia=true;
			$this->usuario = $this->post("nombre_usuario");
			$this->titulo = $this->post("titulo");
			$this->tagsArray = split(",", $this->post("tags"));
			$this->texto = $bbcparser->bb2html(stripcslashes($this->post("texto")));
			$this->fecha = date("Y-m-d");
			$this->render("consultar");
		}
		function error($idmensaje) {
			$errores = Array(
				1 => "No hay sesión activa",
				2 => "Artículo no encontrado",
			);
			Flash::error('Error: '.$errores[$idmensaje]);
		}
		function consultar($titulo) {
			$articulos = new Articulos();
			$usuarios = new Usuarios();
			$tags = new Tags();
			$Calificaciones = new Calificaciones();
			$Archivos = new Archivos();
			$bbcparser = new BBCodeParser();
			$this->tagsArray= array();
			$articulo = $articulos->find_first("conditions: titulo='$titulo'");
			$this->vistaprevia = false;
			if($articulo === false)
			{
				//return $this->redirect('articulos/error/2');
				$this->titulo = $titulo;
			}
			else
			{
				$usuario = $usuarios->find_first("id='".$articulo->usuarios_id."'");
				foreach($tags->find("articulos_id='".$articulo->id."'") as $tag)
				{
					$this->tagsArray[] = $tag->tag;
				}
				$this->usuario = $usuario->nombre_usuario;
				$this->titulo = $articulo->titulo;
				$this->texto = $bbcparser->bb2html($articulo->texto);
				$this->fecha = $articulo->enviado_at;
				$this->usuarios_id = $articulo->usuarios_id;
			
				# Para la calificacion
				$this->a_id = $articulo->id;
				$this->u_id = $_SESSION["id"];
				$this->haysesion = $this->haysesion();
				$calificaciones = $Calificaciones->find("conditions: articulos_id=$articulo->id");
				$this->califpromedio = 0;
				if($calificaciones !== false)
				{
					$this->califpromedio = $calificaciones[0]->calificacion;
					foreach($calificaciones as $calificacion)
					{
						$this->califpromedio += $calificacion->calificacion;
						$this->califpromedio /= 2;
					}
				}
				
				# Para los archivos
				$this->archivos = array();
				$this->archivos = $Archivos->find("conditions: articulos_id=$articulo->id");
				# Para los comentarios
				$this->comments = array();
				$comentarios = $articulo->getComentarios();
				foreach($comentarios as $comentario)
				{
					$comentario->comentario = $bbcparser->bb2html($comentario->comentario);
					$this->comments[] = $comentario;
				}
			}
		}
		function archivo()
		{
			$fechaInicio = intval(date("Y"));
			$Articulos = new Articulos();
			$this->articulosordenados = $Articulos->find("order: enviado_at desc");
		}
		private function haysesion()
		{
			if(isset($_SESSION['nombre_usuario']) && isset($_SESSION['password'])) 
				$haysesion = true;
			else
				$haysesion = false;
			return $haysesion;
		}
		function edicion($titulo)
		{
			$Articulos = new Articulos();
			$Tags = new Tags();
			$Archivos = new Archivos();
			$TemasRelacionados = new TemasRelacionados();
			$resultado = $Articulos->find_first("conditions: titulo = '$titulo'");
			if ($resultado === FALSE)
			{
				Flash::error("Error: no se pudo encontrar el artículo.");
				$this->render("index");
			}
			$Articulos->find($resultado->id);
			$this->tags = Array();
			foreach($Articulos->getTags() as $tag)
			{
				$this->tags[] = $tag->tag;
			}
			$this->titulo = $resultado->titulo;
			$this->texto  = $resultado->texto;
			$this->id = $resultado->id;
			# Para los archivos
			$this->archivos = $Archivos->find("conditions: articulos_id=$this->id");
		}
		function editar()
		{
			$titulo = $this->post("titulo");
			$Articulos = new Articulos();	
			$TemasRelacionados = new TemasRelacionados();
			$articulo = $Articulos->find_first(intval($this->post("id")));
			if($articulo === false)
			{
				Flash::error("Error: no se pudo encontrar artículo en la base de datos.");
			}
			else
			{
				$articulo->titulo = $titulo;
				$articulo->texto = stripcslashes($this->post("texto"));
				$articulo->update();
				$Tags = new Tags();
				# borrar tags anteriores
				$tagsArticulo = $Tags->find("conditions: articulos_id=$articulo->id");
				foreach($tagsArticulo as $tag)
				{
					$tag->delete();
				}
				# actualizar con las nuevas
				$tags = $this->post("tags");
				$tagsArray = split(",",$tags);
				foreach($tagsArray as $valor)
				{
					if(sizeof($Tags->find("tag='".$valor."' and articulos_id='".$articulo->id."'")) == 0)
					{
						$tag = new Tags();
						$tag->tag = $valor;
						$tag->articulos_id = $articulo->id;
						$tag->save();
					}					
				}	
				# Para archivos nuevos
				$cantidaddearchivos = $this->post("cantidaddearchivos");
				for($i=1;$i<=$cantidaddearchivos;$i++)
				{
					if(move_uploaded_file($_FILES["archivo$i"]["tmp_name"],"public/files/$articulo->usuarios_id/".$_FILES["archivo$i"]["name"]))
					{
						$archivo = new Archivos();
						$archivo->ruta_archivo = "public/files/$articulo->usuarios_id/".$_FILES["archivo$i"]["name"];
						$archivo->titulo = $_FILES["archivo$i"]["name"];
						$archivo->usuarios_id = $articulo->usuarios_id;
						$archivo->articulos_id = $articulo->id;
						$archivo->enviado_at = date("Y-m-d");
						$archivo->save();
					}
				}
				# Para los temas relacionados
				$tema = $TemasRelacionados->find_first("conditions: articulos_id=$articulo->id");
				if($tema === false)
				{
					$tema = new TemasRelacionados();
					$tema->tema = $this->post("categoria");
					$tema->articulos_id = $articulo->id;
					$tema->save();
				}
				else
				{
					$tema->tema = $this->post("categoria");
					$tema->update();
				}
				Flash::success("Se editó el artículo exitosamente.");
			}
		}
		function calificar()
		{
			$calif = $this->post("calif");
			$id = $this->post("id");
			$usuarios_id = $this->post("usuarios_id");
			$this->haysesion = $this->haysesion();
			if($this->haysesion() === true)
			{
				$Calificaciones = new Calificaciones();
				$Articulos = new Articulos();
				$calificacion = $Calificaciones->find_first("conditions: usuarios_id=$usuarios_id and articulos_id=$id");
				if($calificacion != false)
				{
					Flash::error("Error: Ya calificaste este articulo.");
				}
				else
				{
					$calificacion = new Calificaciones();
					$calificacion->articulos_id = $id;
					$calificacion->usuarios_id = $usuarios_id;
					$calificacion->calificacion = $calif;
					$calificacion->save();
					$articulo = $Articulos->find_first("conditions: id=$id");
					Flash::success("Has calificado el artículo con éxito.");
					echo "Puedes regresar al artículo haciendo click <a href='/postafile/articulos/consultar/$articulo->titulo'>aqui</a>.";
				}
			}
			else
			{
				Flash::error("Error: Necesitas iniciar sesión para calificar.");
			}
		}
		function borrarArchivo($id)
		{
			$Archivos = new Archivos();
			$archivo = $Archivos->find_first($id);
			if(!unlink($archivo->ruta_archivo))
			{
				Flash::error("Error: no se pudo borrar archivo.");
			}
			else
			{
				$archivo->delete();
				Flash::success("Archivo borrado.");
			}
		}
		function comentar()
		{
			$comentario = new Comentarios();
			$comentario->comentario = $this->post("comentario");
			$comentario->usuarios_id = $this->post("usuarios_id");
			$comentario->titulo = $this->post("titulo");
			$comentario->articulos_id = $this->post("articulos_id");
			$comentario->enviado_at = date("Y-m-d");
			$comentario->save();
			Flash::success("Has comentado con éxito.");
		}
		function editarcomentario($id)
		{
			$Comentarios = new Comentarios();
			$comentario = $Comentarios->find_first($id);
			$this->comentario = $comentario;
		}
		function editcomment()
		{
			$Comentarios = new Comentarios();
			$comentario = $Comentarios->find_first($this->post("id"));
			$comentario->titulo = $this->post("titulo");
			$comentario->comentario = $this->post("comentario");
			$comentario->update();
			Flash::success("Comentario editado con éxito.");
		}
	}
	class BBCodeParser
	{
		// A simple FAST parser to convert BBCode to HTML
		// Trade-in more restrictive grammar for speed and simplicty
		//
		// author: Louai Munajim
		// website: http://elouai.com
		// date: 2004/Apr/18
		//
		// Syntax Sample:
		// --------------
		// [img]http://elouai.com/images/star.gif[/img]
		// [url="http://elouai.com"]eLouai[/url]
		// [mail="webmaster@elouai.com"]Webmaster[/mail]
		// [size="25"]HUGE[/size]
		// [color="red"]RED[/color]
		// [b]bold[/b]
		// [i]italic[/i]
		// [u]underline[/u]
		// [list][*]item[*]item[*]item[/list]
		// [code]value="123";[/code]
		// [quote]John said yadda yadda yadda[/quote]
		// [youtube]http://www.youtube.com/v/46EXY4oP1Do[/youtube]
		function bb2html($text)
		{
		  $bbcode = array("<", ">",
				"[list]", "[*]", "[/list]", 
				"[img]", "[/img]", 
				"[b]", "[/b]", 
				"[u]", "[/u]", 
				"[i]", "[/i]",
				'[color="', "[/color]",
				"[size=\"", "[/size]",
				'[url="', "[/url]",
				"[mail=\"", "[/mail]",
				"[code]", "[/code]",
				"[quote]", "[/quote]",
				"[youtube]","[/youtube]",
				'"]');
		  $htmlcode = array("&lt;", "&gt;",
				"<ul>", "<li>", "</ul>", 
				"<img src=\"", "\">", 
				"<b>", "</b>", 
				"<u>", "</u>", 
				"<i>", "</i>",
				"<span style=\"color:", "</span>",
				"<span style=\"font-size:", "</span>",
				'<a href="', "</a>",
				"<a href=\"mailto:", "</a>",
				"<code>", "</code>",
				"<table width=100% bgcolor=lightgray><tr><td bgcolor=white>", "</td></tr></table>",
				'<embed src="','&hl" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed>',
				'">');
		  $newtext = str_replace($bbcode, $htmlcode, $text);
		  $newtext = nl2br($newtext);//second pass
		  return $newtext;
		}
	}
		
?>
